// 数据库
let mysql = require("mysql")
let con = mysql.createConnection({
    host: "127.0.0.1",
    user: "root",
    password: "root",
    database: "stu"
})
con.connect()

let form = require("formidable")
let form2 = new form.IncomingForm()
let urll = require("url")
//express
let express = require("express")
let app = express()
//socket
let server = require("http").Server(app)
let io = require("socket.io")(server)
//cookie
let cookie = require("cookie-parser");
app.use(cookie())
app.use(express.static("node_modules"))
app.set("view engine", "ejs")
app.set("views", "./views")

//设置登录页面路由
app.get("/login", (req, res) => {
    res.render("login")
    res.end()
})
let a;
//设置登录按钮路由
app.post("/login", (req, res) => {
    //获取表单内容
    form2.parse(req, (err, dui) => {
        if (!err) {
            console.log(dui);
            //解构表单内容
            var { username, password } = dui
            //查找名字为输框中的这个账号
            let sql = "select * from users where username=?"
            let sql2 = mysql.format(sql, [username])
            con.query(sql2, (err, yes) => {
                if (!err) {
                    console.log(yes);
                    //长度为1说明有这个账号
                    if (yes.length > 0) {
                        //判断一下密码是否正确
                        if (yes[0].password == password) {
                            //存储登录账号的用户名
                            a = username
                            //获取图片路径
                            // console.log(yes[0].img);
                            //找到登录表的所有信息
                            let sql = "select * from login where username=?"
                            let sql2 = mysql.format(sql, [username])
                            con.query(sql2, (err, d) => {
                                if (!err) {
                                    if (d.length > 0) {
                                        //找到了说明已经登录过了
                                        console.log(d);
                                    } else {
                                        //没找到就添加到登录表种
                                        console.log("没找到");
                                        let sql = "insert into login (username)value(?)"
                                        let sql2 = mysql.format(sql, [username])
                                        console.log(sql2);
                                        con.query(sql2, (err, d) => {
                                            if (!err) {
                                                console.log(d);
                                                // console.log(username, password);
                                            } else {
                                                console.log("插入失败");
                                            }
                                        })
                                    }
                                }
                            })
                            res.render("lts", { "data": yes })//把username传到前台
                        }
                    } else {
                        console.log("账号或密码错误");
                        res.render("zhuce")
                    }
                }
            })
        }
    })
})

//设置游客路由
app.get("/yk", (req, res) => {
    //给游客设置一个username
    let yes = [{
        username: '游客',
        img: 'node_modules\\uploads\\upload_76371f25d20819b1b319299c214eac68.webp'
    }]
    res.render("lts", { "data": yes })
    a = "游客"
})
//退出
app.get("/logout", (req, res) => {
    console.log("退出成功");
    //找到退出的这个账号
    let url = req.url;
    let name = urll.parse(url, true).query.name;
    // console.log(name);
    //退出登录之后将登陆表这条给删除了
    let sql = "delete from login where username=?"
    let sql2 = mysql.format(sql, [name])
    console.log(sql2);
    con.query(sql2, (err, dui) => {
        if (!err) {
            console.log("删除成功");
        } else {
            console.log("删除失败");
        }
    })
    //退出之后跳到登录页面
    res.render("login")
})

//历史记录
app.get("/lsjl", (req, res) => {
    //查询历史表中所有信息
    sql = "select * from lts"
    con.query(sql, (err, dui) => {
        if (!err) {
            console.log(dui);
            //把表中的信息传到前台上
            res.json({ "ls": dui })
        }
    })
    // res.end()
})

//在线人数
app.get("/hqlog", (req, res) => {
    //查询历史表中所有信息
    sql = "select * from login"
    con.query(sql, (err, dui) => {
        if (!err) {
            console.log(dui);
            //把表中的信息传到前台上
            res.json({ "zx": dui })
        }
    })
})

//注册
app.get("/zhuce", (req, res) => {
    res.render("zhuce")
    res.end()
})
app.post("/zhuce", (req, res) => {
    //配置文件上传路径(默认不会自动创建，需要自己创建)
    form2.uploadDir = "./node_modules/uploads";
    //是否保留文件扩展名
    form2.keepExtensions = true;
    form2.parse(req, (err, dui, files) => {
        if (!err) {
            // console.log(dui);
            //console.log(files.myfile.path);
            let { username, password } = dui
            //用户名不能重复
            let sql = "select * from login where username=?"
            let sql2 = mysql.format(sql, [username])
            con.query(sql2, (err, dui) => {
                if (!err) {
                    if (dui.length > 0) {
                        //说明该账号已经注册过了
                        console.log(dui);
                        res.redirect("/zhuce")
                    } else {
                        //这个账号没被注册过，就插入到login表中
                        let sql = "insert into users (username,password,img)value(?,?,?)"
                        let sql2 = mysql.format(sql, [username, password, files.myfile.path])
                        con.query(sql2, (err, dui) => {
                            if (!err) {
                                // console.log(dui);
                                if (dui.affectedRows > 0) {
                                    res.redirect("/login")
                                }
                            }
                        })
                    }
                }
            })

        }
    })
})


server.listen(8090)
io.on("connection", function (socket) {
    console.log("上线一个人");
    //如果用户名不为游客的话，就给客户端返回信息
    if (a != "游客") {
        //给客户端返回消息，给当前登录人发欢迎进入聊天室，
        socket.emit("2", "欢迎" + a + "进入聊天室")
        //给其它人发XX来了
        socket.broadcast.emit("2", a + "来了")
    }

    //接收客户端的消息
    socket.on("2", function (res) {
        // console.log(res);
        //解构消息
        let { name, text } = res
        //插入到历史记录的表中
        let sql = "insert into lts (name,text) value (?,?)"
        let sql2 = mysql.format(sql, [name, text])
        con.query(sql2, (err, dui) => {
            if (!err) {
                if (dui.affectedRows > 0) {
                    //添加到数据表中成功
                }
            }
        })
        //消息广播给所有人
        socket.broadcast.emit("1", res)
    })
})